iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
自我挑戰組

DevOps的下克上之旅( ° ∀ ° )ノ゙系列 第 21

Day 21: 壓力測試Jmeter

  • 分享至 

  • xImage
  •  

系統上線以前,如果我們沒有去挑戰一個系統的極限,我們永遠不知道該系統最高可以有多少的可靠度,壓力測試就是因此而生(Stress testing)。最常見的就是Jmeter,一款由Apache開源的JAVA壓力測試工具。

https://ithelp.ithome.com.tw/upload/images/20210923/20119044KtDmsDij8T.png

Jmeter能做到的事情包含:

  • HTTPS 性能測試
  • LDAP 測試
  • FTP

更重要的是,Jmeter在完成測試後可以產生完整動態的HTML報告,方便使用者觀看。 接下來就來講一下Jmeter的安裝與使用。今天也會介紹一下如何將Jmeter Dockerize,明天會介紹如何將Jmeter整合進Jenkins。

安裝Jmeter

進入Apache Jmeter

  • Windows版安裝 : apache-jmeter-X.X.X.zip
  • Linux版安裝 : apache-jmeter-X.X.X.tgz

以下用Windows版講解:
下載完成後解壓縮,獲得了一包apache-jmeter-X.X.X,cmd 執行該包下的apache-jmeter-X.X.X/bin/jmeter.bat。可以獲得一個Jmeter畫面:

https://ithelp.ithome.com.tw/upload/images/20210923/20119044N23kdZ0B9U.png

接下來我們要建立Jmeter的腳本,假如測試目標是Express的一個GET API,localhost:3000/hello,呼叫後會回傳Hello World,我們要來看看系統最高能承受多少的壓力。以及localhost:3000/postParams,測試呼叫的參數是否符合要求。

router.get("/hello",function(req,res,next){
  res.send("<h1>Hello World</h1>")
})

router.post("/postParams",function(req,res){
  const params = req.body.number;
  if(params < 1000) res.send("That's Good Number") //回傳200
  else res.status(404).send("I don't like this Number") //回傳404
})

壓力測試

進入Jmeter GUI後在測試計畫(Test Plan)上點擊右鍵 > Add > Threads(Users) > Thread Group。每一個Threads就是在模擬每一個人的行為。

https://ithelp.ithome.com.tw/upload/images/20210923/201190442pNzW7ClDb.png

在Thread Properities中,Number of Threads代表同時模擬的用戶數,Loop Count代表共幾輪。可以暫時調成1000人與3輪。接著對著Thread Group按右鍵 > Add > Sampler > Http Reqester

https://ithelp.ithome.com.tw/upload/images/20210923/20119044ScVneYAxpg.png

在Http Request中輸入這次Test名稱、Server Name、路徑。localhost:3000/hello如下:
https://ithelp.ithome.com.tw/upload/images/20210923/20119044CnzkMYLdIA.png

多建立幾個Http Request任務後我們就能開始執行測試了。對著Thread Group 右鍵 > Add > Listener > ... ,可以選擇各式各樣的結果圖,這裡選擇Summary Report。 按下save保存你的測試參數為一個.jmx檔,接下來按下三角型進行測試。

https://ithelp.ithome.com.tw/upload/images/20210923/20119044gVTScOLTBl.png

注: 要是按下save報錯
打開 Options > Look and Feel > 選擇一個非Darcula的外觀 > 重新啟動即可解決。

Summary Report可以很清楚的看到測試結果:
https://ithelp.ithome.com.tw/upload/images/20210923/20119044U6BHScE0FB.png

參數測試

如上面的API,他只接受1000以下的數字,我們可以來建立一個Sequencial的數字與Random的數字來進行測試。

Random數與Post
該如何建立Random數,可以參考Jmeter function,同樣的接著對著Thread Group按右鍵 > Add > Sampler > Http Reqester,這次選擇POST,底下選擇Body Data,輸入:

// Body Data
{
	"number": ${__Random(0,2000)}
}

但是這樣還不夠,Post的data不是JSON格式,對著HTTP Request右鍵 > Config Element > HTTP Header Manager,新增一個格式為content-type:application/json

https://ithelp.ithome.com.tw/upload/images/20210924/20119044IYTBSW64xJ.png

Sequence 數
該如何建立Sequence數,讓我們從0~1000每個數字測試一遍呢? Jmeter沒有給這個Function,但是還是能辦到。對著Thread Group右鍵 > Add > Logic Controller > Loop Controller

https://ithelp.ithome.com.tw/upload/images/20210924/201190440bgQJ1eiLl.png

Loop Controller內有一個Loop Count,這代表執行幾次Loop。比如說Thread Group的Threads為1000、Thread Group的Loop Count為2、Loop Controller的Loop Count為2,則Loop總共執行次數是: 1000*2*2共4000次。

接著對著Loop Controller右鍵 > Add > Config Element > Counter
https://ithelp.ithome.com.tw/upload/images/20210924/20119044J6GgEdAiww.png

Counter可以設定你的Start Number與Increment,最重要的定義你的Export Variable Name,這裡我定義成counter_value

https://ithelp.ithome.com.tw/upload/images/20210924/20119044Yk8amIt55q.png

再次建立好你的HTTP Request (在Loop Countroller之下),記得調整你的HTTP Header,然後在Body Data輸入:

// Body Data
{
	"number": ${counter_value}
}

https://ithelp.ithome.com.tw/upload/images/20210924/20119044O3xYbdEeHN.png

接著就能套用運行順序類的參數了。


上一篇
Day 20 : Jenkins Pipeline與撰寫Jenkinsfile
下一篇
Day 22 : Docker化Jmeter 與連結Jenkins自動化測試
系列文
DevOps的下克上之旅( ° ∀ ° )ノ゙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言